package com.seecen.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.seecen.pojo.dto.PropertyDto;
import com.seecen.pojo.entity.Property;
import com.seecen.service.PropertyService;
import com.seecen.mapper.PropertyMapper;
import com.seecen.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
* @author xuxin
* @description 针对表【t_property(用户资产管理表)】的数据库操作Service实现
* @createDate 2025-10-16 10:19:26
*/
@Service
@Slf4j
public class PropertyServiceImpl extends ServiceImpl<PropertyMapper, Property>
    implements PropertyService{

    @Autowired
    private PropertyMapper propertyMapper;

    @Override
    public Result getPropertyList(Long userId) {
        log.info("获取用户资产列表 - userId: {}", userId);
        
        // 只查询当前用户的资产
        LambdaQueryWrapper<Property> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Property::getUserId, userId)
               .eq(Property::getIsDeleted, 0)
               .orderByDesc(Property::getCreateTime);
        
        List<Property> propertyList = propertyMapper.selectList(wrapper);
        log.info("查询到 {} 条资产记录", propertyList.size());
        
        return Result.ok(propertyList);
    }

    @Override
    public Result addProperty(PropertyDto propertyDto, Long userId) {
        log.info("添加资产 - userId: {}, name: {}", userId, propertyDto.getName());
        
        Property property = new Property();
        property.setUserId(userId); // 使用从 token 解析的 userId
        property.setName(propertyDto.getName());
        property.setType(propertyDto.getType());
        property.setMoney(propertyDto.getMoney());
        property.setRemark(propertyDto.getRemark());
        property.setCreator(userId);
        property.setLastUpdator(userId);
        
        propertyMapper.insert(property);
        log.info("资产添加成功 - id: {}", property.getId());
        
        return Result.ok(null);
    }

    @Override
    public Result updatePropertyById(Long id, PropertyDto propertyDto, Long userId) {
        log.info("更新资产 - id: {}, userId: {}", id, userId);
        
        // 先查询原资产信息
        Property oldProperty = propertyMapper.selectById(id);
        
        // 验证资产是否存在
        if (oldProperty == null) {
            log.warn("资产不存在 - id: {}", id);
            return Result.build(null, 404, "资产不存在");
        }
        
        // 验证资产是否属于当前用户（权限检查）
        if (!oldProperty.getUserId().equals(userId)) {
            log.warn("无权操作此资产 - id: {}, ownerId: {}, currentUserId: {}", 
                     id, oldProperty.getUserId(), userId);
            return Result.build(null, 403, "无权操作此资产");
        }
        
        // 更新资产信息
        Property newProperty = new Property();
        newProperty.setId(id);
        newProperty.setUserId(userId); // 保持 userId 不变
        newProperty.setType(propertyDto.getType());
        newProperty.setName(propertyDto.getName());
        newProperty.setMoney(propertyDto.getMoney());
        newProperty.setRemark(propertyDto.getRemark());
        newProperty.setCreateTime(oldProperty.getCreateTime());
        newProperty.setCreator(oldProperty.getCreator());
        newProperty.setLastUpdator(userId);
        newProperty.setLastUpdateTime(new Date());
        
        propertyMapper.updateById(newProperty);
        log.info("资产更新成功 - id: {}", id);
        
        return Result.ok(null);
    }

    @Override
    public Result deletePropertyById(Long id, Long userId) {
        log.info("删除资产 - id: {}, userId: {}", id, userId);
        
        // 先查询资产信息
        Property property = propertyMapper.selectById(id);
        
        // 验证资产是否存在
        if (property == null) {
            log.warn("资产不存在 - id: {}", id);
            return Result.build(null, 404, "资产不存在");
        }
        
        // 验证资产是否属于当前用户（权限检查）
        if (!property.getUserId().equals(userId)) {
            log.warn("无权删除此资产 - id: {}, ownerId: {}, currentUserId: {}", 
                     id, property.getUserId(), userId);
            return Result.build(null, 403, "无权删除此资产");
        }
        
        // 逻辑删除（使用 MyBatis-Plus 的 @TableLogic）
        propertyMapper.deleteById(id);
        log.info("资产删除成功 - id: {}", id);
        
        return Result.ok(null);
    }
}




